SpringBoot使用Nacos动态配置数据源

您所在的位置:网站首页 nacos 配置中心不起作用 SpringBoot使用Nacos动态配置数据源

SpringBoot使用Nacos动态配置数据源

2023-12-29 03:17| 来源: 网络整理| 查看: 265

SpringBoot/SpringCloud项目部署运行后,如果使用硬编码方式定义数据源,那么如果需要更换数据库,就只能通过更改源码并重启的方式来达成目的 而SpringCloud生态中有配置中心这一组件,我们可以将数据源连接属性编写在配置中心中,需要修改连接属性就可以从配置中心中修改并发布,这样就可以热修改数据源位置无需重启服务

那么下面实战说明如何将使用Nacos配置/注册中心配置数据源(请注意看我写的注释来避坑) 首先说明版本 SpringBoot 2.2.0.RELEASEDruid 1.1.22 (再重写的时候类会随着版本的不同而不同)MySQL 8.0.18Nacos 1.3.1(Nacos版本不对很可能会踩坑)IDEA 2020.3.2MyBatis 2.1.4(没用上,但若使用并不冲突) 文章较长,但大多都是复制粘贴操作,先在这里说明整个配置的步骤 创建SpringBoot项目并引入依赖(直接复制粘贴)创建bootstrap.yml文件(直接复制粘贴)创建配置类(直接复制粘贴)重写Druid的DruidAbstractDataSource类(这个需要根据版本来修改)在Nacos配置中心中新建配置 完成配置后的项目目录

项目目录

请注意:我默认读者会使用IDEA创建SpringBoot项目,并且可以自己安装Nacos

1.maven依赖 UTF-8 UTF-8 1.8 3.1.1 com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.1.RELEASE pom import org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.4 org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-starter-web mysql mysql-connector-java runtime com.alibaba druid-spring-boot-starter 1.1.22 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-configuration-processor true org.projectlombok lombok true provided 1.18.12 2.bootstrap.yml(这个优先级高于propertie文件,用于配置Nacos)

如果需要区分生产环境或将Nacos持久化至MySQL请自行学习Nacos官方文档

spring: application: #这个服务名称与最下面的file-extension: properties合起来 #即questionBank.properties为Nacos配置文件的名称 name: questionBank cloud: nacos: #注册中心 discovery: # 是否启用 enabled: true # nacos服务地址 server-addr: 127.0.0.1:8848 # 服务名 #service: ${spring.application.name} # 组名 group: DEFAULT # 权重 weight: 2 # 元数据 metadata: auth: sty version: 1.0 # 日志名 log-name: ${spring.application.name} # 是否开启watch watch: true # 多长时间从服务端拉取一次 watch-delay: 30000 # 集群名称 cluster-name: DEFAULT # 是否开启注册,如果为false,不会将自身注册上去 register-enabled: true # https secure: false #配置中心 config: server-addr: 127.0.0.1:8848 #个人比较喜欢用properties文件,yaml缩进老出错 file-extension: properties server: port: 8080 3.配置类:DruidConfiguration(叫啥名无所谓) import com.alibaba.druid.pool.DruidDataSource; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Author:STY * @Description: 数据源获取配置(配置中心) * @Date:2021/3/17 */ @Configuration @RefreshScope @Data public class DruidConfiguration { @Value("${spring.datasource.druid.url}") private String url; @Value("${spring.datasource.druid.username}") private String username; @Value("${spring.datasource.druid.password}") private String password; @Value("${spring.datasource.druid.url.driverClassName}") private String driverClassName; @Bean(name="datasource") @RefreshScope public DruidDataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); System.out.println(url); datasource.setUrl(this.url); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); return datasource; } }

注意注意:@RefreshScope一定要加!!!!!!!否则将无法自动刷新从Nacos发布的新数据,因为lombok比较好用所以@Data就直接用他的了

4.然后就是最重要的一步(这个视Druid版本来修改)

重申一下我用的Druid版本为1.1.22

重写com.alibaba.druid.pool.DruidAbstractDataSource类 由于Druid只允许初始化一次,所以只能修改他的源码,而版本不同会导致该类并不相同,在修改源码时必须尤为注意!!!!!!

在com包下创建alibaba.druid.pool(路径别错了)

修改Druid源码 DruidAbstractDataSource类直接复制过来

在这里插入图片描述

然后在复制过来的类中找到以下两个方法 注释掉画圈位置 setUsername setUrl

至此,本地的项目已经配置完成,下面剩下最后一个步骤,在Nacos上创建配置文件

Nacos 这个Data id 与上面第二个步骤中的名称配置对应(注意看注释) 配置格式要勾选Properties 配置 点击发布,搞定!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3